gkt-demo: Add a columview to the scroll demo
authorMatthias Clasen <mclasen@redhat.com>
Tue, 10 Nov 2020 01:07:09 +0000 (20:07 -0500)
committerMatthias Clasen <mclasen@redhat.com>
Tue, 10 Nov 2020 01:07:09 +0000 (20:07 -0500)
This is an interesting case, since it has many labels,
and we are struggling to provide good scrolling performance.

demos/gtk-demo/iconscroll.c
demos/gtk-demo/listview_ucd.c

index d7a6c1b5e3ec000c865ecb66558f4f9d742ce21d..43d74c49f76e582582649dbf761fb4087bcea40e 100644 (file)
@@ -13,7 +13,7 @@ static GtkWidget *window = NULL;
 static GtkWidget *scrolledwindow;
 static int selected;
 
-#define N_WIDGET_TYPES 6
+#define N_WIDGET_TYPES 7
 
 
 static int hincrement = 5;
@@ -177,6 +177,24 @@ populate_grid (void)
   gtk_scrolled_window_set_child (GTK_SCROLLED_WINDOW (scrolledwindow), list);
 }
 
+extern GtkWidget *create_ucd_view (GtkWidget *label);
+
+static void
+populate_list2 (void)
+{
+  GtkWidget *list;
+
+  list = create_ucd_view (NULL);
+
+  hincrement = 0;
+  vincrement = 5;
+
+  gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledwindow),
+                                  GTK_POLICY_AUTOMATIC,
+                                  GTK_POLICY_AUTOMATIC);
+  gtk_scrolled_window_set_child (GTK_SCROLLED_WINDOW (scrolledwindow), list);
+}
+
 static void
 set_widget_type (int type)
 {
@@ -216,6 +234,11 @@ set_widget_type (int type)
       break;
 
     case 5:
+      gtk_window_set_title (GTK_WINDOW (window), "Scrolling a list");
+      populate_list2 ();
+      break;
+
+    case 6:
       gtk_window_set_title (GTK_WINDOW (window), "Scrolling a grid");
       populate_grid ();
       break;
index 9fe85fcbd11647abcc256550480668ecb306e2bf..df120fcb08a1527f3293ab0be886d5bbca157a25 100644 (file)
@@ -259,7 +259,7 @@ selection_changed (GObject    *object,
   gtk_label_set_label (GTK_LABEL (label), buffer);
 }
 
-static GtkWidget *
+GtkWidget *
 create_ucd_view (GtkWidget *label)
 {
   GtkWidget *cv;
@@ -273,7 +273,8 @@ create_ucd_view (GtkWidget *label)
   selection = gtk_single_selection_new (ucd_model);
   gtk_single_selection_set_autoselect (selection, TRUE);
   gtk_single_selection_set_can_unselect (selection, FALSE);
-  g_signal_connect (selection, "notify::selected", G_CALLBACK (selection_changed), label);
+  if (label)
+    g_signal_connect (selection, "notify::selected", G_CALLBACK (selection_changed), label);
 
   cv = gtk_column_view_new (GTK_SELECTION_MODEL (selection));
   gtk_column_view_set_show_column_separators (GTK_COLUMN_VIEW (cv), TRUE);